package com.test.demo;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.Vector;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.widget.Toast;

import com.example.myprojectoffeixue.R;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.macrovideo.sdk.custom.DeviceInfo;
import com.macrovideo.sdk.defines.Defines;

public class MipcaActivityCapture extends Activity implements Callback
{
	private InactivityTimer inactivityTimer;
	private CaptureActivityHandler handler;
	private ViewfinderView viewfinderView;
	private boolean hasSurface;
	private Vector<BarcodeFormat> decodeFormats;
	private String characterSet;
	private MediaPlayer mediaPlayer;
	private boolean playBeep;
	private final static int RESULT_CODE=1;
	private static final float BEEP_VOLUME = 0.10f;
	private boolean vibrate;
	public static String CALL_BACK = "info";
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK ){
			Intent intent = new Intent(MipcaActivityCapture.this, DeviceListViewActivity.class);
		    startActivity(intent);
		    MipcaActivityCapture.this.finish();
			 
		}
		 
		return super.onKeyDown(keyCode, event);
	}
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.qrdecode_cam_view);
		CameraManager.init(getApplication());
		viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);

		hasSurface = false;
		inactivityTimer = new InactivityTimer(this);
	}

	@SuppressWarnings("deprecation")
	@Override
	protected void onResume() {
		super.onResume();
		SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
		SurfaceHolder surfaceHolder = surfaceView.getHolder();
		if (hasSurface) {
			initCamera(surfaceHolder);
		} else {
			surfaceHolder.addCallback(this);
			surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}
		decodeFormats = null;
		characterSet = null;

		playBeep = true;
		AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);
		if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {
			playBeep = false;
		}
		initBeepSound();
		vibrate = true;

	}

	@Override
	protected void onPause() {
		super.onPause();
		if (handler != null) {
			handler.quitSynchronously();
			handler = null;
		}
		CameraManager.get().closeDriver();
	}

	@Override
	protected void onDestroy() {
		inactivityTimer.shutdown();
		super.onDestroy();
	}


	public void handleDecode(final Result obj, Bitmap barcode) {
		inactivityTimer.onActivity();
		playBeepSoundAndVibrate();
		String strResult = obj.getText();
		if(strResult!=null && strResult.indexOf("QRRESULT^111")==0){
			DeviceInfo info = parseResult(strResult);
			if(info!=null){
				LocalDefines._isQRResultOK=true;
				LocalDefines._nQRResultDevice=info.getnDevID();
			}else{
				LocalDefines._isQRResultOK=true;
				LocalDefines._nQRResultDevice=0;
			}

		}else{
			LocalDefines._isQRResultOK=true;
			LocalDefines._nQRResultDevice=0;
			Toast toast = Toast.makeText(this, getString(R.string.QRcodeErrorDevice), Toast.LENGTH_SHORT);
			toast.setGravity(Gravity.CENTER, 0, 0);
			toast.show();

		}

//		System.out.println("DefinesK = "+Defines._isQRResultOK+", "+Defines._nQRResultDevice);//add for test

		//Intent intent =new Intent(MipcaActivityCapture.this, DeviceListViewActivity.class);
		//startActivity(intent);
		MipcaActivityCapture.this.finish();
	}

	private void initCamera(SurfaceHolder surfaceHolder) {
		try {
			CameraManager.get().openDriver(surfaceHolder);
		} catch (IOException ioe) {
			return;
		} catch (RuntimeException e) {
			return;
		}
		if (handler == null) {
			handler = new CaptureActivityHandler(this, decodeFormats, characterSet);
		}
	}

	@Override
	public void surfaceChanged(SurfaceHolder holder, int format, int width,
							   int height) {

	}

	@Override
	public void surfaceCreated(SurfaceHolder holder) {
		if (!hasSurface) {
			hasSurface = true;
			initCamera(holder);
		}

	}

	@Override
	public void surfaceDestroyed(SurfaceHolder holder) {
		hasSurface = false;

	}

	public ViewfinderView getViewfinderView() {
		return viewfinderView;
	}

	public Handler getHandler() {
		return handler;
	}

	public void drawViewfinder() {
		viewfinderView.drawViewfinder();

	}

	private void initBeepSound() {
		if (playBeep && mediaPlayer == null) {
			// The volume on STREAM_SYSTEM is not adjustable, and users found it
			// too loud,
			// so we now play on the music stream.
			setVolumeControlStream(AudioManager.STREAM_MUSIC);
			mediaPlayer = new MediaPlayer();
			mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
			mediaPlayer.setOnCompletionListener(beepListener);

			AssetFileDescriptor file = getResources().openRawResourceFd(
					R.raw.beep);
			try {
				mediaPlayer.setDataSource(file.getFileDescriptor(),
						file.getStartOffset(), file.getLength());
				file.close();
				mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);
				mediaPlayer.prepare();
			} catch (IOException e) {
				mediaPlayer = null;
			}
		}
	}

	private static final long VIBRATE_DURATION = 200L;

	private void playBeepSoundAndVibrate() {
		if (playBeep && mediaPlayer != null) {
			mediaPlayer.start();
		}
		if (vibrate) {
			Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
			vibrator.vibrate(VIBRATE_DURATION);
		}
	}



	private DeviceInfo parseResult(String strResult){

		int nTokenIndex=0;
		boolean bIsOK=false;
		int nPort=8800;
		int nDevID=0;
		String strName="";
		String strIP="192.168.1.1";
		String strUsername="admin";
		String strPassword="";
		DeviceInfo info = null;
		if(strResult.indexOf("QRRESULT^111")==0){//������ipcam
			bIsOK=false;
			StringTokenizer st = new StringTokenizer(strResult, "^") ;
			nTokenIndex=0;
//	        	//@@System.out.println("searchP2P recv: "+st.countTokens());//add for test
			while(st.hasMoreTokens()){//while 2

				String token = st.nextToken();
				switch(nTokenIndex){
					case 2:
						nDevID= Integer.parseInt(token);
						bIsOK = true;
						strName=token;
						break;

				}

				nTokenIndex++;
			}//end while 2

			if(bIsOK){//ipcam������￿	        		//���������豸ʹ��Ĭ�ϵ��û�������￿admin,����Ĭ��Ϊ��
				strUsername = "admin";
				strPassword = "";

//	        		//@@System.out.println("nDevID="+nDevID);//add for test

				info = new DeviceInfo(0, nDevID, strName,  strIP,
						nPort,  strUsername,  strPassword,  "0", nDevID+ Defines.MV_DOMAIN_SUFFIX, Defines.SERVER_SAVE_TYPE_ADD);


			}
		}

		return info;

	}
	/**
	 * When the beep has finished playing, rewind to queue up another one.
	 */
	private final OnCompletionListener beepListener = new OnCompletionListener() {
		public void onCompletion(MediaPlayer mediaPlayer) {
			mediaPlayer.seekTo(0);
		}
	};

}